package com.jingHang.service.impl;

import com.jingHang.common.Const;
import com.jingHang.common.ServerResponse;
import com.jingHang.dao.UserMapper;
import com.jingHang.pojo.User;
import com.jingHang.service.IUserService;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

//声明为service控制层
@Service("iUserService")
public class UserServiceImpl implements IUserService {

    @Autowired
    UserMapper userMapper;

    @Override
    public ServerResponse login(String userName, String password) {

        //判断用户名是否存在
        int resultCount = userMapper.checkUserName(userName);
        if (resultCount <= 0) {
            //{1，“用户名不存在”}
            return ServerResponse.createByError("用户名不存在");
        }
        //登录操作
        User user = userMapper.selectLogin(userName, password);
        if (user == null) {
            return ServerResponse.createByError("密码错误");
        }

        //密码置空
        user.setPassword("");
        return ServerResponse.createBySuccess(user);
    }

    @Override
    public ServerResponse<String> register(User user) {
        //验证用户名是已注册
        //备注对象的属性，方便理解
        //status = 1 ,msg="用户名已存在"
        ServerResponse validResponse = checkArgsValid(user.getUsername(), Const.USERNAME);
        if (!validResponse.isSuccess()) {
            return validResponse;
        }
        //验证邮箱是否已注册
        validResponse = checkArgsValid(user.getEmail(), Const.EMAIL);
        if (!validResponse.isSuccess()) {
            return validResponse;
        }

        user.setRole(Const.Role.ROLE_CUSTOMER);
        int resultCount = userMapper.insert(user);
        if (resultCount == 0) {
            return ServerResponse.createByError("注册失败");
        }
        return ServerResponse.createBySuccessMsg("注册成功");
    }


    /**
     * 校验参数是否合法
     * 1.用户名不能重复
     * 2.邮箱不能重复注册
     * @param arg  参数
     * @param type 参数类型
     * @return
     */
    public ServerResponse<String> checkArgsValid(String arg, String type) {
        //校验参数类型是否为空  “   ”  null
        if (StringUtils.isNotBlank(arg)) {
            //如果校验类型等于
            //equals:username 是否等于传入的参数（type）
            if (Const.USERNAME.equals(type)) {
                int resultCount = userMapper.checkUserName(arg);
                if (resultCount > 0) {
                    return ServerResponse.createByError("用户名已存在");
                }
            }
            //如果校验类型等于 email
            if (Const.EMAIL.equals(type)) {
                int resultCount = userMapper.checkEmail(arg);
                if (resultCount > 0) {
                    return ServerResponse.createByError("email已存在");
                }
            }
        } else {
            return ServerResponse.createByError("参数错误");
        }
        return ServerResponse.createBySuccessMsg("校验成功");
    }



    public ServerResponse<User> updateInformation(User user){
        //username是不能被更新的
        //email也要进行一个校验,校验新的email是不是已经存在,并且存在的email如果相同的话,不能是我们当前的这个用户的.
        //验证邮箱是否被使用
        int resultCount = userMapper.checkEmailByUserId(user.getEmail(),user.getId());
        if(resultCount > 0){
            return ServerResponse.createByError("email已存在,请更换email再尝试更新");
        }
        //为什么重新new一个对象,不直接使用传入的对象
        User updateUser = new User();
        updateUser.setId(user.getId());
        updateUser.setPassword(user.getPassword());
        updateUser.setEmail(user.getEmail());
        updateUser.setPhone(user.getPhone());
        updateUser.setQuestion(user.getQuestion());
        updateUser.setAnswer(user.getAnswer());

        int updateCount = userMapper.updateByPrimaryKeySelective(updateUser);
        if(updateCount > 0){
            return ServerResponse.createBySuccess("更新个人信息成功",updateUser);
        }
        return ServerResponse.createByError("更新个人信息失败");
    }


    public ServerResponse<User> getInformation(Integer userId){
        User user = userMapper.selectByPrimaryKey(userId);
        if(user == null){
            return ServerResponse.createByError("找不到当前用户");
        }
        user.setPassword(StringUtils.EMPTY);
        return ServerResponse.createBySuccess(user);

    }




    /**
     * 校验是否是管理员
     * @param user
     * @return
     */
    public ServerResponse checkAdminRole(User user){
        if(user != null && user.getRole().intValue() == Const.Role.ROLE_ADMIN){
            return ServerResponse.createBySuccess();
        }
        return ServerResponse.createByError();
    }

    /**
     * 学习方法
     * @param user
     * @return
     */
    public ServerResponse checkAdminRoleTest(User user){
        //当user不等于null
        if(user != null){
            //Integer ==> int
            //Integer类型自动(隐式)拆箱为 int类型
            //int userRole = user.getRole();
            //Integer类型手动（显示）拆箱为 int类型
            int userRole = user.getRole().intValue();
            //int ROLE_ADMIN = 1;//管理员
            int constRole = Const.Role.ROLE_ADMIN;
            if( userRole== constRole){
                return ServerResponse.createBySuccess();
            }else {
                return ServerResponse.createByError();
            }
        }else {
            return ServerResponse.createByError();
        }

    }


}
